package com.guomei.service;

import com.guomei.bean.*;
import com.guomei.bean.user.dto.BindDistributorIdDTO;
import com.guomei.utils.Result;

import java.util.List;

public interface UserService {

    /**
     * 用户注册
     */
    Result<?> register(RegisterDTO registerDTO);

    /**
     * 手机号密码登录
     */
    Result<?> loginByPassword(LoginDTO loginDTO);

    /**
     * 手机号验证码登录
     */
    Result<?> loginByCode(LoginDTO loginDTO);

    /**
     * 生成临时二维码
     * @param sceneId 场景ID
     * @return 二维码信息
     */
    Result<?> generateTempQrCode(Integer sceneId, Integer userId);

    /**
     * 生成永久二维码
     * @param sceneStr 场景字符串
     * @return 二维码信息
     */
    WechatQrCode generatePermanentQrCode(String sceneStr);

    /**
     * 通过授权码获取用户信息
     * @param code 授权码
     * @return 微信用户信息
     */
    WechatUserInfo getUserInfoByCode(String code);

    /**
     * 通过openid获取用户信息
     * @param openid 用户openid
     * @return 微信用户信息
     */
    WechatUserInfo getUserInfoByOpenid(String openid);

    /**
     * 获取微信access_token
     * @return access_token
     */
    String getAccessToken();

    /**
     * 处理微信回调
     * @param code 授权码
     * @param state 状态值
     * @return 处理结果
     */
    boolean processCallback(String code, String state);

    /**
     * 检查二维码扫描状态
     * @param qrCodeId 二维码ID
     * @return 扫描结果信息
     */
    Result<?> checkQrCodeScanStatus(String qrCodeId);


    /**
     * 根据ID查询用户
     */
    Result<?> getUserById(Long id);
    
    /**
     * 根据ID查询用户信息（包含角色信息）
     * @param id 用户ID
     * @return 包含角色信息的用户信息
     */
    Result<com.guomei.bean.user.vo.UserInfo> getUserInfoWithRoles(Long id);

    /**
     * 根据手机号查询用户
     */
    User getUserByPhone(String phone);

    Result<?> autoRegister(WechatUserInfo wechatUserInfo);
    
    /**
     * 扫码后自动创建用户（不需要绑定手机号）
     * @param openid 微信OpenID
     * @return 登录结果
     */
    Result<?> autoCreateUserByQrScan(String openid);
    
    /**
     * 修改密码
     */
    Result<?> changePassword(ChangePassword changePassword);
    /**
     * 获取所有可被授权用户信息
     */
    Result<?> getALLUser(GetAllUserDTO getAllUserDTO);
    /**
     * 获取所有老师信息
     */
    Result<?> getALLTeacher(GetAllUserDTO getAllUserDTO);
    /**
     * 删除权限
     */
    Result<?> deleteRole(DeleteRoleDTO deleteRoleDTO);

    /**
     * 验证微信签名
     * @param signature 签名
     * @param timestamp 时间戳
     * @param nonce 随机数
     * @return 验证结果
     */
    boolean verifyWechatSignature(String signature, String timestamp, String nonce);

    /**
     * 处理微信消息
     * @param signature 签名
     * @param timestamp 时间戳  
     * @param nonce 随机数
     * @param msgSignature 消息体签名
     * @param encryptType 加密类型
     * @param requestBody 请求体
     * @return 响应结果
     */
    Object handleWechatMessage(String signature, String timestamp, String nonce, String msgSignature, String encryptType, String requestBody);


    Result<?> updateUser(UpdateUser updateUser);
    /**
     * 同步用户角色（支持添加和删除）
     * @param userRoles 用户角色关联信息列表（前端期望的最终角色状态）
     * @param userId 用户ID
     * @return 同步结果
     */
    Result<?> assignRoleToUser(List<UserRole> userRoles, Long userId);

    /**
     * 分销码绑定功能
     * @param bindDistributorIdDTO 绑定分销码请求参数
     * @return 绑定结果
     */
    Result<?> bindDistributorId(BindDistributorIdDTO bindDistributorIdDTO);

}
